home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / demo.exe / DATETIME.DEM < prev    next >
Text File  |  1992-02-16  |  11KB  |  404 lines

  1. ; ----------------------------
  2. ; DATETIME.DEM - Demoprogramm für die Routinen aus DATETIME.LIB
  3. ;                (für den A86)
  4. ;
  5. ;                (c) Bernd Schemmer 1990 - 1992
  6. ;                Letzter Update: 15.02.1992
  7. ;
  8. ; Übersetzen:
  9. ;  A86 DATETIME.DEM DEMOS.INC TO DATETIME.COM
  10. ;
  11. ; Hinweis: Die Environment-Variable 'A86' muß den Dateinamen 'MACROS.MAC'
  12. ;          enthalten und die .LIB-Dateien müssen über die Datei A86.LIB
  13. ;          erreichbar sein.
  14. ;
  15. ; ---------------------------
  16.  
  17.          jmp start            ; Daten überspringen
  18.  
  19. logo  db CR,LF
  20.       db 'DATETIME.DEM  - Demoprogramm für die Routinen aus DATETIME.LIB'
  21.       db CR,LF
  22.       db '--------------------------------------------------------------'
  23.       db CR,LF
  24.       db CR,LF
  25. GETLENGTH logo
  26.  
  27. ; --------
  28. ; Daten
  29. ;
  30. TimeTable db 12 dup (0)       ; Definition der Zeit-Tabelle für die Stopuhr-
  31.                               ; routinen
  32.  
  33. start:
  34.          call ShowLogo        ; Logo ausgeben und Speicherblock verkleinern
  35.  
  36.          call Starte_StopUhr  ; Stopuhr starten ...
  37.  
  38.      call Ermittle_Datum  ; akt. Datum ermitteln
  39.  
  40.          call Ermittle_Zeit   ; akt. Zeit ermitteln
  41.  
  42.          call Setze_Datum     ; neues Datum setzen
  43.  
  44.          call Setze_Zeit      ; neue Zeit setzen
  45.  
  46. Ende:
  47.          call Stoppe_StopUhr  ; Stopuhr stoppen
  48.  
  49.          EndProcess 0
  50.  
  51. ; ----------------------------
  52. ; Setze_Datum
  53. ;
  54. ; Funktion:  Setzen des Datums
  55. ;
  56. msg5 db CR,LF
  57.      db 'Bitte geben Sie das neue Datum ein (Form: TT.MM.JJ{JJ})'
  58.      db CR,LF
  59.      db '(<RETURN> -> nicht ändern): '
  60. GETLENGTH msg5
  61.  
  62. error2 db 'Fehler: Eingegebenes Datum hat falsches Format!'
  63.        db CR,LF
  64.        db 'Nochmal versuchen?'
  65. GETLENGTH error2
  66.  
  67. puffer2 db 255,256 dup 0      ; Puffer für das neue Datum
  68.  
  69. Setze_Datum:
  70.          WRITE_STRING msg5
  71.                               ; Neues Datum lesen
  72.          mov dx,offset puffer2
  73.          mov ah,0AH
  74.          int 021h
  75.          call ShowCR_LF
  76.  
  77.          mov al,b puffer2+1   ; AL = Anzahl eingegebener Zeichen
  78.          or al,al
  79.          je >l1               ; nur RETURN gedrückt
  80.  
  81.                               ; neues Datum setzen
  82.          mov si,offset puffer2+1
  83.                               ; DS:SI zeigt auf das eingegebene Datum
  84.                   ; als String!
  85.  
  86.          call SetDate
  87.          jnc >l0
  88.                               ; Format-Fehler!
  89.          WRITE_STRING error2
  90.          mov ah,08
  91.          int 021h
  92.          call ShowCR_LF
  93.                               ; Neuer Versuch ?
  94.          cmp al,'J'
  95.          IF e jmp Setze_Datum
  96.  
  97.          cmp al,'j'
  98.          if e jmp Setze_Datum
  99.          cmp al,CR
  100.          if e jmp Setze_Datum
  101. l0:
  102.          call Ermittle_Datum  ; und akt. Datum nochmal ausgeben
  103. l1:
  104.          ret
  105.  
  106. ; ----------------------------
  107. ; Setze_Zeit
  108. ;
  109. ; Funktion:  Setzen der Zeit
  110. ;
  111. msg4 db CR,LF
  112.      db 'Bitte geben Sie die neue Zeit ein (Form: HH.MM.SS{:HH})'
  113.      db CR,LF
  114.      db '(<RETURN> -> nicht ändern): '
  115. GETLENGTH msg4
  116.  
  117. error1 db 'Fehler: Eingegebene Zeit hat falsches Format!'
  118.        db CR,LF
  119.        db 'Nochmal versuchen?'
  120. GETLENGTH error1
  121.  
  122. puffer1 db 255,256 dup 0      ; Puffer für die neue Zeit
  123.  
  124. Setze_Zeit:
  125.          WRITE_STRING msg4
  126.                               ; Neue Zeit lesen
  127.          mov dx,offset puffer1
  128.          mov ah,0AH
  129.          int 021h
  130.          call ShowCR_LF
  131.  
  132.          mov al,b puffer1+1   ; AL = Anzahl eingegebener Zeichen
  133.          or al,al
  134.          je >l1               ; nur RETURN gedrückt
  135.  
  136.                               ; neue Zeit setzen
  137.          mov si,offset puffer1+1
  138.                               ; DS:SI zeigt auf die eingegebene Zeit
  139.                   ; als String!
  140.          call SetTime
  141.          jnc >l0
  142.                               ; Format-Fehler!
  143.          WRITE_STRING error1
  144.          mov ah,08
  145.          int 021h
  146.          call ShowCR_LF
  147.                               ; Neuer Versuch ?
  148.          cmp al,'J'
  149.          IF e jmp Setze_Zeit
  150.          cmp al,'j'
  151.          if e jmp Setze_Zeit
  152.          cmp al,CR
  153.          if e jmp Setze_Zeit
  154. l0:
  155.          call Ermittle_Zeit   ; und akt. Zeit nochmal ausgeben
  156. l1:
  157.          ret
  158.  
  159. ; ----------------------------
  160. ; Ermittle_Datum
  161. ;
  162. ; Funktion: Ermittelt das akt. Datum
  163. ;
  164. msg2   db CR,LF
  165.        db 'Das aktuelle Datum ist'
  166. _date1 db '                                              '
  167.        db CR,LF
  168.        db 'oder in anderer Form: '
  169. _date2 db '                                              '
  170.        db CR,LF
  171.        db 'oder in anderer Form: '
  172. _date3 db '                                              '
  173.        db CR,LF
  174.        db 'oder in anderer Form: '
  175. _date4 db '                                              '
  176.        db CR,LF
  177. GETLENGTH msg2
  178.  
  179. Ermittle_Datum:
  180.        mov ax,2020h           ; Zuerst altes Datum in den Meldungen ausblanken
  181.        mov cx,23xD
  182.        mov di,offset _date1
  183.        push cx
  184.        rep stosw
  185.        pop cx
  186.        mov di,offset _date2
  187.        push cx
  188.        rep stosw
  189.        pop cx
  190.        mov di,offset _date3
  191.        push cx
  192.        rep stosw
  193.        pop cx
  194.        mov di,offset _date4
  195.        push cx
  196.        rep stosw
  197.        pop cx
  198.  
  199.                               ; Datum ermitteln in allen 4 Formen
  200.        mov al,_date1
  201.        push ax                ; Byte für Längenzähler sichern
  202.        mov di,offset _date1
  203.        mov ax,0
  204.        call GetDate
  205.        pop ax
  206.        mov _date1,al          ; Längenzähler überschreiben
  207.  
  208.        mov al,_date2
  209.        push ax                ; Byte für Längenzähler sichern
  210.        mov di,offset _date2
  211.        mov ax,1
  212.        call GetDate
  213.        pop ax
  214.        mov _date2,al          ; Längenzähler überschreiben
  215.  
  216.        mov al,_date3
  217.        push ax                ; Byte für Längenzähler sichern
  218.        mov di,offset _date3
  219.        mov ax,2
  220.        call GetDate
  221.        pop ax
  222.        mov _date3,al          ; Längenzähler überschreiben
  223.  
  224.        mov al,_date4
  225.        push ax                ; Byte für Längenzähler sichern
  226.        mov di,offset _date4
  227.        mov ax,3
  228.        call GetDate
  229.        pop ax
  230.        mov _date4,al          ; Längenzähler überschreiben
  231.                               ; und Maske ausgeben
  232.        WRITE_STRING msg2
  233.        ret
  234.  
  235. ; ----------------------------
  236. ; Ermittle_Zeit
  237. ;
  238. ; Funktion: Ermittelt die akt. Zeit
  239. ;
  240. msg3   db CR,LF
  241.        db 'Die aktuelle Zeit ist'
  242. _time4 db '                                              '
  243.        db CR,LF
  244.        db 'oder in anderer Form: '
  245. _time5 db '                                              '
  246.        db CR,LF
  247.        db 'oder in anderer Form: '
  248. _time6 db '                                              '
  249.        db CR,LF
  250. GETLENGTH msg3
  251.  
  252. Ermittle_Zeit:                ; Zuerst alte Zeit in den Meldungen ausblanken
  253.        mov ax,2020h
  254.        mov cx,23xD
  255.        mov di,offset _time4
  256.        push cx
  257.        rep stosw
  258.        pop cx
  259.        mov di,offset _time5
  260.        push cx
  261.        rep stosw
  262.        pop cx
  263.        mov di,offset _time6
  264.        push cx
  265.        rep stosw
  266.        pop cx
  267.                               ; Zeit ermitteln in allen 3 Formen
  268.        mov al,_time4
  269.        push ax                ; Byte für Längenzähler sichern
  270.        mov di,offset _time4
  271.        mov ax,0
  272.        call GetTime
  273.        pop ax
  274.        mov _time4,al          ; Längenzähler überschreiben
  275.  
  276.        mov al,_time5
  277.        push ax                ; Byte für Längenzähler sichern
  278.        mov di,offset _time5
  279.        mov ax,1
  280.        call GetTime
  281.        pop ax
  282.        mov _time5,al          ; Längenzähler überschreiben
  283.  
  284.        mov al,_time6
  285.        push ax                ; Byte für Längenzähler sichern
  286.        mov di,offset _time6
  287.        mov ax,2
  288.        call GetTime
  289.        pop ax
  290.        mov _time6,al          ; Längenzähler überschreiben
  291.                               ; und Maske ausgeben
  292.        WRITE_STRING msg3
  293.        ret
  294.  
  295. ; ----------------------------
  296. ; Starte_StopUhr
  297. ;
  298. ; Funktion: Startet die Stopuhr und gibt die Startzeit aus
  299. ;
  300. msg0  db CR,LF
  301.       db 'Zuerst die Stopuhr starten ...   '
  302.       db CR,LF
  303. GETLENGTH msg0
  304.  
  305. msg00  db 'Stopuhr gestartet um'
  306. _time0 db ' __:__:__:__'
  307.        db CR,LF
  308. GETLENGTH msg00
  309.  
  310. Starte_StopUhr:
  311.          WRITE_STRING msg0
  312.                               ; Stopuhr starten
  313.                               ; Routine soll die Startzeit bei ES:DI
  314.                               ; im Stringformat speichern
  315.          mov al,_time0        ; Byte sichern, da der Längenzähler nicht
  316.                               ; benötigt wird!
  317.          push ax
  318.  
  319.          mov bx,offset timetable
  320.          mov di,offset _time0
  321.          xor ax,ax
  322.          call StartTimer
  323.  
  324.          pop ax
  325.          mov _time0,al        ; Längenzähler wieder überschreiben
  326.  
  327.                               ; Startzeit anzeigen
  328.          WRITE_STRING msg00
  329.          ret
  330.  
  331. ; ----------------------------
  332. ; Stoppe_StopUhr
  333. ;
  334. ; Funktion: Stopt die Stopuhr und gibt die Stop- und Laufzeit aus
  335. ;
  336. msg1  db CR,LF
  337.       db 'Zum Schluß die Stopuhr stoppen ...   '
  338.       db CR,LF
  339. GETLENGTH msg1
  340.  
  341. msg10  db 'Stopuhr gestopt um  '
  342. _time1 db ' __:__:__:__'
  343.        db CR,LF
  344. GETLENGTH msg10
  345.  
  346. msg11  db '-----------------------------------'
  347.        db CR,LF
  348.        db 'Die Laufzeit beträgt'
  349. _time2 db ' __:__:__:__'
  350.        db CR,LF
  351. GETLENGTH msg11
  352.  
  353. msg12  db 'Die Laufzeit konnte nicht berechnet werden!'
  354.        db CR,LF
  355.        db 'Sehr wahrscheinlich haben Sie die Zeit verändert!'
  356.        db CR,LF
  357. GETLENGTH msg12
  358.  
  359.  
  360. Stoppe_StopUhr:
  361.          WRITE_STRING msg1
  362.                               ; Stopuhr stoppen
  363.                               ; Routine soll die Stoppzeit bei ES:DI
  364.                               ; im Stringformat speichern
  365.  
  366.          mov al,_time1        ; Byte sichern, da der Längenzähler nicht
  367.                               ; benötigt wird!
  368.          push ax
  369.  
  370.          mov bx,offset timetable
  371.          mov di,offset _time1
  372.          xor ax,ax
  373.          call StopTimer
  374.  
  375.          pop ax
  376.          mov _time1,al        ; Längenzähler wieder überschreiben
  377.  
  378.                               ; nun die Laufzeit konvertieren
  379.          mov al,_time2        ; Byte sichern, da der Längenzähler nicht
  380.                               ; benötigt wird!
  381.          push ax
  382.  
  383.          mov bx,offset TimeTable
  384.          mov di,offset _time2
  385.          xor ax,ax
  386.          call Berechne_Laufzeit
  387.  
  388.          pop ax
  389.          mov _time2,al        ; Längenzähler wieder überschreiben
  390.  
  391.          pushf                ; Ergebnis von Berechne_Laufzeit sichern
  392.          WRITE_STRING msg10   ; Stoppzeit ausgeben
  393.          WRITE_STRING msg00   ; Startzeit nochmal ausgeben
  394.          popf                 ; Laufzeit korrekt ermittelt?
  395.          jnc >l1
  396.  
  397.          WRITE_STRING msg12   ; Laufzeit konnte nicht ermittelt werden
  398.          ret
  399. l1:
  400.                               ; Laufzeit anzeigen
  401.          WRITE_STRING msg11
  402.          ret
  403.  
  404.